package com.lx.inter.condition.generator;

import com.lx.constant.segment.Segment;
import com.lx.wrapper.AbstractWrapper;
import org.hibernate.query.Query;

/**
 * SQL条件生成器
 *
 * @author lx
 * @create 2022/12/12 23:43
 **/
public interface IGenerator<T extends Segment> {

    /**
     * 生成条件语句参数,根据Hibernate参数占位方式进行处理
     *
     * @param parentWrapper
     * @param thisWrapper   实体
     * @param formatEl      格式化表达式
     * @param sg            语句对象
     * @param isHQL         是否生成HQL语句
     * @return
     */
    String generatorCondition(AbstractWrapper parentWrapper, AbstractWrapper thisWrapper, String formatEl, T sg, Boolean isHQL);

    /**
     * 为上述方法生成的Hibernate占位进行参数设置
     *
     * @param sg
     * @param isHQL
     * @param query
     */
    void setHibernateParam(T sg, Boolean isHQL, Query query);

}
